#include<iostream>
#include<queue>
using namespace std;
struct node{
    int x;
    int y;
    int o;
    node(){
        o=0;
    }
};
queue<node>q;
int fx[8]={1,1,1,-1,-1,-1,0,0};
int fy[8]={1,-1,0,1,-1,0,1,-1};
int map[200][200];
int main(){
    int x,y,mx,my;
    cin>>x>>y>>mx>>my;
    for(int i=y;i>=1;i--){
        for(int j=1;j<=x;j++){
            char f;
            cin>>f;
            if(f=='.')map[i][j]=0;
            if(f=='*')map[i][j]=1;
        }
    }
    map[mx][my]=0;
    node n;
    n.x=my;
    n.y=mx;
    q.push(n);
    int ans=0;
    while(!q.empty()){
        node f=q.front();
        q.pop();
        if(q.empty())ans=f.o;
        for(int i=0;i<8;i++){
            int x1=f.x+fx[i];
            int y1=f.y+fy[i];
            if(x1<1||y1<1||x1>y||y1>x)continue;
            if(!map[x1][y1]){
                node n1;
                n1.x=x1;
                n1.y=y1;
                n1.o=f.o+1;
                map[x1][y1]=1;
                q.push(n1);
            }
        }
    }
    //  for(int i=1;i<=y;i++){
    //     for(int j=1;j<=x;j++){
    //        cout<<map[i][j];
    //     }
    //     cout<<endl;
    // }
    cout<<ans;
    return 0;
}